package com.mystudy.leetcode.problem.tree.p_437;

/**
 * @program: infoalgorithm
 * @description: 路径总和
 * @author: zhouzhilong
 * @create: 2019-08-09 10:43
 **/

import com.mystudy.leetcode.base.TreeNode;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 给定一个二叉树，它的每个结点都存放着一个整数值。
 * <p>
 * 找出路径和等于给定数值的路径总数。
 * <p>
 * 路径不需要从根节点开始，也不需要在叶子节点结束，但是路径方向必须是向下的（只能从父节点到子节点）。
 * <p>
 * 二叉树不超过1000个节点，且节点数值范围是 [-1000000,1000000] 的整数。
 * <p>
 * 示例：
 * <p>
 * root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8
 * <p>
 * 10
 * /  \
 * 5   -3
 * / \    \
 * 3   2   11
 * / \   \
 * 3  -2   1
 * <p>
 * 返回 3。和等于 8 的路径有:
 * <p>
 * 1.  5 -> 3
 * 2.  5 -> 2 -> 1
 * 3.  -3 -> 11
 */
public class Solution {
    private static final Logger LOGGER = LoggerFactory.getLogger(Solution.class);

    long startTime = 0L;
    long endTime = 0L;


    @Before
    public void before() {
        startTime = System.nanoTime();
    }

    @Test
    public void test() {
    }

    @After
    public void after() {
        endTime = System.nanoTime();
        double cost = (endTime - startTime) / 1000000.0;
        LOGGER.debug("cost = [{} ms ]", cost);
    }


    /**
     *
     * @param root
     * @param sum
     * @return
     */
    public int pathSum(TreeNode root, int sum) {
        if (root == null) {
            return 0;
        }
        return getPaths(root, sum)+ pathSum(root.left, sum)+ pathSum(root.right, sum);
    }

    private int getPaths(TreeNode root, int dst) {
        System.out.println("cur:"+root.val);
        System.out.println("dst:"+dst);
        int result = 0;
        int leftResult = 0;
        int rightResult = 0;
        if (root.val == dst) {
            result += 1;
        }
        if (root.left != null) {
            leftResult = getPaths(root.left, dst - root.val);
        }
        if (root.right != null) {
            rightResult = getPaths(root.right, dst-root.val);
        }
        return result + leftResult + rightResult;
    }


}
